
package carmadness.model.helpers;

/**
 * Felhasználói interakciót bekérő osztály.
 * 
 * @author sztomi
 * 
 */
public class UserInput
{
	/**
	 * A lehetséges választási lehetőségek közül kére egyet a felhasználótól.
	 * 
	 * @param question
	 *            A kiírandó kérdés.
	 * @param choices
	 *            A lehetséges választási lehetőségek.
	 * @return A felhasználó által választott érték.
	 */
	public static int choice( String question, int[] choices )
	{
		int ret = Integer.MIN_VALUE;
		boolean contains = false;

		System.out.println( question );
		System.out.println( "Lehetseges valasztasok: " );
		for ( int i : choices )
		{
			System.out.print( String.format( "%d ", i ) );
		}
		System.out.println();

		while ( !contains )
		{
			try
			{
				java.io.BufferedReader stdin = new java.io.BufferedReader( new java.io.InputStreamReader( System.in ) );
				String line = stdin.readLine();
				ret = Integer.parseInt( line );
			}
			catch ( Exception e )
			{
				System.out.println( "Hibas valasztas!" );
			}

			for ( int i : choices )
			{
				if ( contains = i == ret ) break;
			}

			if ( !contains )
			{
				System.out.println( "Hibas valasztas!" );
				System.out.println( "Lehetseges valasztasok: " );

				for ( int i : choices )
				{
					System.out.print( String.format( "%d ", i ) );
				}
				System.out.println();
			}
		}

		return ret;
	}

	/**
	 * Eldöntendő kérdésre vár választ a felhasználótól (i/n formában)
	 * 
	 * @param question
	 *            A felteendő kérdés.
	 * @return A felhasználó válasza, ha 'i', akkor true.
	 */
	public static boolean yesNo( String question )
	{
		boolean ans = false, hibas = true;

		System.out.println( String.format( "%s (i/n)", question ) );

		try
		{
			while ( hibas )
			{
				java.io.BufferedReader stdin = new java.io.BufferedReader( new java.io.InputStreamReader( System.in ) );
				String line = stdin.readLine();

				if ( hibas = !line.contains( "i" ) && !line.contains( "n" ) )
				{
					System.out.println( "Csak 'i' vagy 'n' valaszt fogadok el." );
					continue;
				}
				else
				{
					ans = line.contains( "i" );
					break;
				}
			}
		}
		catch ( Exception e )
		{
			System.out.println( "Hibas valasztas!" );
		}

		return ans;
	}

	/**
	 * Bekér egy float értéket a felhasználótól.
	 * 
	 * @param question
	 *            A felhasználónak megjelenítendő kérdés/üzenet.
	 * @return A felhasználó által megadott float érték.
	 */
	public static float getFloat( String question )
	{
		boolean hibas = true;
		System.out.println( String.format( "%s (float)", question ) );

		float retval = 0.0f;

		try
		{
			while ( hibas )
			{
				java.io.BufferedReader stdin = new java.io.BufferedReader( new java.io.InputStreamReader( System.in ) );
				String line = stdin.readLine();

				retval = Float.parseFloat( line );
			}
		}
		catch ( NumberFormatException e )
		{
			System.out.println( "Nem sikerult float-kent ertelmezni a bemenetet!" );
		}
		catch ( Exception e )
		{
			System.out.println( "Egyeb hiba!" );
		}

		return retval;
	}

	/**
	 * Bekér egy float értéket a felhasználótól.
	 * 
	 * @param question
	 *            A felhasználónak megjelenítendő kérdés/üzenet.
	 * @return A felhasználó által megadott float érték.
	 */
	public static int getInt( String question )
	{
		System.out.println( String.format( "%s (int)", question ) );

		boolean hibas = true;
		int retval = 0;

		try
		{
			while ( hibas )
			{
				java.io.BufferedReader stdin = new java.io.BufferedReader( new java.io.InputStreamReader( System.in ) );
				String line = stdin.readLine();

				retval = Integer.parseInt( line );
			}
		}
		catch ( NumberFormatException e )
		{
			System.out.println( "Nem sikerült int-ként értelmezni a bemenetet!" );
		}
		catch ( Exception e )
		{
			System.out.println( "Egyeb hiba!" );
		}

		return retval;
	}
}
